/*
* type类型别名和interface接口非常相似，在定义对象类型时，大部分可以任意使用
* interface接口的所有特性都可以在type类型别名中使用
* interface和type的区别：
*   区别一：type类型别名使用范围更广，interface接口只能用来声明对象
*   区别二：在声明对象的时候interface接口可以多次声明，type类型别名不可以
*   区别三：interface接口支持继承，interface支持被类实现
*/


// 定义一个InterfacePerson 的接口
interface InterfacePerson {
    name: String,
    age: number
}

// 定义一个InterfaceStudent接口继承InterfacePerson接口
interface InterfaceStudent extends InterfacePerson {
    address: string
}

const person: InterfaceStudent = {
    name: "陶品奇",
    age: 22,
    address: "衡阳"
}
console.log(person)


// 使用type来声明一个对象的类型别名
type PositionType = {
    x: number,
    y: number,
    z?: number,
}

function fun1(position: PositionType): void {
    console.log(position)
}

fun1({x: 100, y: 200, z: 300})


// 使用interface来声明一个对象类型的接口
interface PositionTypeIn {
    x: number,
    y: number,
    z?: number,
}

function fun2(position: PositionTypeIn): void {
    console.log(position)
}

fun2({x: 100, y: 200, z: 300})

